package gob.osinerg.emergencia.action;

import gob.osinerg.emergencia.bean.AccidenteTrabajo;
import gob.osinerg.emergencia.bean.AccidenteTrabajoDetalle;
import gob.osinerg.emergencia.bean.ActividadBean;
import gob.osinerg.emergencia.bean.EstadisticaEnfermedad;
import gob.osinerg.emergencia.bean.EstadisticaEnfermedadDetalle;
import gob.osinerg.emergencia.bean.FormularioEmergenciaUnmay;
import gob.osinerg.emergencia.bean.UnidadOperativaBean;
import gob.osinerg.emergencia.bean.UsuarioBean;
import gob.osinerg.emergencia.form.AccidenteTrabajoForm;
import gob.osinerg.emergencia.form.EstadisticaEnfermedadForm;
import gob.osinerg.emergencia.service.EstadisticaEnfermedadService;
import gob.osinerg.emergencia.service.GenericService;
import gob.osinerg.emergencia.util.Report;

import java.io.File;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.springframework.util.ResourceUtils;

public class EstadisticaEnfermedadAction extends GenericAction {

	private Log log = LogFactory.getLog(EstadisticaEnfermedadAction.class);

	private EstadisticaEnfermedadService service;
	private GenericService genericService;

	public ActionForward inicio(ActionMapping actionMapping,
			ActionForm actionForm, HttpServletRequest request,
			HttpServletResponse response) throws java.lang.Exception {
		
		Date fechaActual = new Date();
		SimpleDateFormat formato = new SimpleDateFormat("dd/MM/yyyy");
		String cadenaFecha = formato.format(fechaActual);
		EstadisticaEnfermedadForm form = (EstadisticaEnfermedadForm) actionForm;
		EstadisticaEnfermedad estadistica = new EstadisticaEnfermedad();
		estadistica.setFecha(cadenaFecha);
		form.setBean(estadistica);
		form.getMapList().put("anioList",
				gob.osinerg.emergencia.util.Converter.getListaAnnos());
		form.setDetalleList(new ArrayList());
//		form.getDetalleList().add(new EstadisticaEnfermedadDetalle());

		return doAddDetalle(actionMapping, actionForm, request, response);
	}
	
	public ActionForward doSave(ActionMapping actionMapping,
			ActionForm actionForm, HttpServletRequest request,
			HttpServletResponse response) throws java.lang.Exception {
		Date fechaActual = new Date();
		SimpleDateFormat formato = new SimpleDateFormat("dd/MM/yyyy");
		String cadenaFecha = formato.format(fechaActual);
		EstadisticaEnfermedadForm form = (EstadisticaEnfermedadForm) actionForm;
		FormularioEmergenciaUnmay beanform = new FormularioEmergenciaUnmay();
		String message = "messages.insert.successful";
		try {
			EstadisticaEnfermedad bean = (EstadisticaEnfermedad) form.getBean();

			HttpSession session = request.getSession();
			UnidadOperativaBean unidadOperativa = (UnidadOperativaBean) session
					.getAttribute("UnidadOperativaBean");
			UsuarioBean usuario = (UsuarioBean) session
					.getAttribute("UsuarioBean");

			ActividadBean actividad=(ActividadBean)session.getAttribute("ActividadBean");

			Long idUnidadOperativa = Long.valueOf(unidadOperativa.getCodigo());
			
			beanform.setUniopeId(idUnidadOperativa);
			beanform.setCdgoOsinerg(unidadOperativa.getCodigoOsinerg());
			beanform.setRegistroDgh(unidadOperativa.getCodigoDGH());
			beanform.setFrmlarioId(new Long(11));
			beanform.setTpoEmrgncia("EEP");
			beanform.setEstado("GE");
			beanform.setMdioInfrmtvo("SEM");
			beanform.setActiviId(new Long(actividad.getCodigo()));
			beanform.setStrFecha(cadenaFecha);
			beanform.setUsrioCrdor(usuario.getCodigoLogin());
			beanform.setFchaCrcion(new Date());
			
			bean.setIdUnidadOperativa(idUnidadOperativa);
			bean.setUsrioCrdor(usuario.getCodigoLogin());
			bean.setFchaCrcion(new Date());

			service.save(bean, form.getDetalleList(),beanform);
			sendSuccessfulMessage(request, message);
		} catch (Exception ex) {
			log.error(ex.getMessage());
			ex.printStackTrace();
			message = "errors.update.failed.finalParam";
			sendErrorMessage(request, message, ex.getMessage());
		}

		return actionMapping.findForward("inicio");
	}

//	public ActionForward doAddDetalle(ActionMapping actionMapping,
//			ActionForm actionForm, HttpServletRequest request,
//			HttpServletResponse response) throws java.lang.Exception {
//
//		EstadisticaEnfermedadForm form = (EstadisticaEnfermedadForm) actionForm;
//		EstadisticaEnfermedadDetalle detalle = new EstadisticaEnfermedadDetalle();
//		
//		Integer semestre = form.getDetalleList().size() < 6 ? new Integer(1) : new Integer(2);
//		detalle.setSemestre(semestre);
//		detalle.setMes(new Integer(form.getDetalleList().size() + 1));		
//		
//		form.getDetalleList().add(detalle);
//
//		return actionMapping.findForward("inicio");
//	}


	public ActionForward doAddDetalle(ActionMapping actionMapping,
			ActionForm actionForm, HttpServletRequest request,
			HttpServletResponse response) throws java.lang.Exception {

		EstadisticaEnfermedadForm form = (EstadisticaEnfermedadForm) actionForm;
		
		EstadisticaEnfermedad bean = (EstadisticaEnfermedad)form.getBean();
		List detalleList = form.getDetalleList();
		
		if(detalleList.size() == 0){
			EstadisticaEnfermedadDetalle detalle = new EstadisticaEnfermedadDetalle();
			detalle.setSemestre(bean.getSemestre());
			detalle.setMes(new Integer(1));
			detalleList.add(detalle);
		}else{
			int n = (bean.getSemestre().intValue() == 1 ? 1 : 7);
			for(int i=0; i < detalleList.size(); i++){
				EstadisticaEnfermedadDetalle detalle = (EstadisticaEnfermedadDetalle) detalleList.get(i);	
				detalle.setMes(new Integer(i + n));
				detalle.setSemestre(bean.getSemestre());
			}
			EstadisticaEnfermedadDetalle detalle = new EstadisticaEnfermedadDetalle();
			detalle.setSemestre(bean.getSemestre());
			detalle.setMes(new Integer(detalleList.size() + n));
			detalleList.add(detalle);			
		}
		return actionMapping.findForward("inicio");
	}

	public ActionForward loadMeses(ActionMapping actionMapping,
			ActionForm actionForm, HttpServletRequest request,
			HttpServletResponse response) throws java.lang.Exception {

		EstadisticaEnfermedadForm form = (EstadisticaEnfermedadForm) actionForm;
		EstadisticaEnfermedad bean = (EstadisticaEnfermedad)form.getBean();
		List detalleList = new ArrayList();
		int n = (bean.getSemestre().intValue() == 1 ? 1 : 7);
//		for(int i=0; i < detalleList.size(); i++){
//			EstadisticaEnfermedadDetalle detalle = (EstadisticaEnfermedadDetalle) detalleList.get(i);	
//			detalle.setMes(new Integer(i + n));
//			detalle.setSemestre(bean.getSemestre());
//		}
		//for(int i=0; i < detalleList.size(); i++){
		EstadisticaEnfermedadDetalle detalle = new EstadisticaEnfermedadDetalle();
		detalle.setSemestre(bean.getSemestre());
		detalle.setMes(new Integer(n));
		detalleList.add(detalle);
		form.setDetalleList(detalleList);
		//}
		return actionMapping.findForward("inicio");
	}	
	
	public ActionForward exportar(ActionMapping mapping, ActionForm actionForm,
            HttpServletRequest request, HttpServletResponse response) throws Exception {
    	
		EstadisticaEnfermedadForm form = (EstadisticaEnfermedadForm)actionForm;

    	try{
            request.setAttribute("actionReport","reporteEstadisticasEE.do");
            
            HttpSession session = request.getSession();
    		UnidadOperativaBean unidadOperativa = (UnidadOperativaBean) session
    				.getAttribute("UnidadOperativaBean");

    		//Long idUnidadOperativa = Long.valueOf(unidadOperativa.getCodigo());
    		EstadisticaEnfermedad bean = (EstadisticaEnfermedad) form.getBean();

//    		String anio = (bean.getAnio().toString()).equals("0") ? null : bean.getAnio().toString();
//    		String semestre = (bean.getSemestre().toString()).equals("0") ? null : bean.getSemestre().toString();
    		String formatoReporte = request.getParameter("formatoReporte");
    		System.out.println("ID: "+ bean.getId()+"");
            Map parameters = new HashMap();
            parameters.put("ID", bean.getId()+"");
//            parameters.put("UNIOPE_ID", idUnidadOperativa.toString());
//            parameters.put("ANIO", anio);
//            parameters.put("SEMESTRE", semestre);
            parameters.put("REGISTRO_DGH", unidadOperativa.getCodigoDGH());
            parameters.put("IMAGE_LOGO", request.getRequestURL().substring(0, request.getRequestURL().lastIndexOf("/"))+"/images/logo_home.jpg");

            File archivo = ResourceUtils.getFile("classpath:gob/osinerg/emergencia/resource/jrxml/ReporteEstadisticasEE.jrxml");

    		Report report = new Report();
    		report.setJasperReport(archivo);
    		report.setParameter(parameters);
    		report.setConnection(genericService.getConnection());
    		
    		if(formatoReporte.equals("PDF")){
    			report.PDF(request, response);   		
    		}else{
            	response.setHeader("Content-Disposition", "inline; filename=ReporteEstadisticasEP.xls");
            	report.XLS(request, response, Boolean.TRUE);      			
    		}  		
    	}catch(Exception ex){
    		log.error(ex.getMessage());
    	}
        return null;
    }	
	
	public void setGenericService(GenericService genericService) {
		this.genericService = genericService;
	}

	public void setService(EstadisticaEnfermedadService service) {
		this.service = service;
	}

}
